From 638645d69c7648372cb98f858bb7d427490083b8 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild2.aw" Date: Fri, 16 Feb 2007 15:49:05 -0700 Subject: [PATCH] [IA64] vcpu hot-plug/remove for VTi Return to SAL added for VTi by adding a new SAL (OEM defined) function. Using this patch I was able to hot-add/hot-remove under linux (in fact virtualized hot). Signed-off-by: Tristan Gingold --- xen/arch/ia64/vmx/vlsapic.c | 4 +++- xen/arch/ia64/xen/fw_emul.c | 4 ++++ xen/include/asm-ia64/dom_fw.h | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/xen/arch/ia64/vmx/vlsapic.c b/xen/arch/ia64/vmx/vlsapic.c index 4bc9ab5cc7..979571620d 100644 --- a/xen/arch/ia64/vmx/vlsapic.c +++ b/xen/arch/ia64/vmx/vlsapic.c @@ -672,7 +672,9 @@ static void vlsapic_write_ipi(VCPU *vcpu, uint64_t addr, uint64_t value) if (targ == NULL) panic_domain(NULL, "Unknown IPI cpu\n"); - if (!test_bit(_VCPUF_initialised, &targ->vcpu_flags)) { + if (!test_bit(_VCPUF_initialised, &targ->vcpu_flags) || + test_bit(_VCPUF_down, &targ->vcpu_flags)) { + struct pt_regs *targ_regs = vcpu_regs(targ); struct vcpu_guest_context c; diff --git a/xen/arch/ia64/xen/fw_emul.c b/xen/arch/ia64/xen/fw_emul.c index 1a2f5b5173..8a4897deaf 100644 --- a/xen/arch/ia64/xen/fw_emul.c +++ b/xen/arch/ia64/xen/fw_emul.c @@ -371,6 +371,10 @@ sal_emulator (long index, unsigned long in1, unsigned long in2, case SAL_UPDATE_PAL: printk("*** CALLED SAL_UPDATE_PAL. IGNORED...\n"); break; + case SAL_XEN_SAL_RETURN: + if (!test_and_set_bit(_VCPUF_down, ¤t->vcpu_flags)) + vcpu_sleep_nosync(current); + break; default: printk("*** CALLED SAL_ WITH UNKNOWN INDEX. IGNORED...\n"); status = -1; diff --git a/xen/include/asm-ia64/dom_fw.h b/xen/include/asm-ia64/dom_fw.h index fcf2cb5739..6dc204ebda 100644 --- a/xen/include/asm-ia64/dom_fw.h +++ b/xen/include/asm-ia64/dom_fw.h @@ -180,6 +180,9 @@ #define EFI_MEMDESC_VERSION 1 +/* Additionnal OEM SAL. */ +#define SAL_XEN_SAL_RETURN 0x02000000 + extern struct ia64_pal_retval xen_pal_emulator(u64, u64, u64, u64); extern struct sal_ret_values sal_emulator (long index, unsigned long in1, unsigned long in2, unsigned long in3, unsigned long in4, unsigned long in5, unsigned long in6, unsigned long in7); extern struct ia64_pal_retval pal_emulator_static (unsigned long); -- 2.30.2